home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
news
/
inn1.000
/
inn1.4sec-linux-src.tar
/
inn
/
lib
/
xwritev.c
< prev
Wrap
C/C++ Source or Header
|
1992-10-29
|
864b
|
42 lines
/* $Revision: 1.3 $
**
*/
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/uio.h>
#include "clibrary.h"
/*
** Do a writev, return -1 on error; 0 if okay. Handling the return value
** of writev is a pain. It should return the number of iov's it fully
** wrote out, and update the fields in all of them to contain the new
** startpoints.
*/
int
xwritev(fd, vp, vpcount)
int fd;
struct iovec *vp;
register int vpcount;
{
register int i;
register long left;
/* Get the total bytecount. */
for (left = 0, i = vpcount; --i >= 0; )
left += vp[i].iov_len;
while (vpcount) {
if ((i = writev(fd, vp, (SIZE_T)vpcount)) < 0)
return -1;
if ((left -= i) <= 0)
break;
for (; i >= vp->iov_len; vp++, vpcount--)
i -= vp->iov_len;
vp->iov_base += i;
vp->iov_len -= i;
}
return 0;
}